The present application relates to computer-generated imagery (CGI) and animation, and more particularly to techniques for processing and manipulating complex scenes.
The complexity of scenes in animated films keeps increasing with each new film as the number of objects in a scene and the level of interaction between the objects in a scene keeps increasing. Each object in a scene is generally represented by a model. A model is generally a collection of geometric primitives, mathematical representations, and other information that is used to describe the shape and behavior of an object. Accordingly, a scene may comprise multiple objects (each represented by a model) interacting with each other.
Scenes are generally created by animators that specify the movement of the models and the interactions between the models. Conventionally, in order for an animator to specify the animation for a particular scene, information related to all the models involved in the scene must be loaded into memory of the animator's computer or workstation. However, due to the larger number of models involved in scene of new films and the richer interactions between the models, quite often the computing and memory resources of the animator's computer are inadequate to load and process all the models involved in a scene. The increasing complexity of scenes has also impacted the manner in which scenes are rendered. Conventionally, when a 3D scene is rendered into a 2D image, all the models involved in the scene must be concurrently loaded into memory of computer(s) allocated for the rendering process in order for the scene to be rendered. However, many times for a complex scene, the memory resources of a renderer are not large enough to accommodate the information that must be loaded to render the scene. Nevertheless, animators and renderers must be able to animate and render such complex scenes with a minimum of overhead devoted to working around the above-mentioned limitations.
One conventional technique that is used to try to resolve the above-mentioned problems is to reduce the complexity of a scene. This is done by representing each object in a scene at a low-fidelity that consumes less memory when loaded into computer memory of a computer. The low fidelity representations also evaluate more rapidly than the final (render) quality versions. However, even with the low-fidelity versions of the models, there is a limit to the number of models that can be loaded into computer memory simultaneously. Further, as more and more models are loaded, the interactions between the models considerably slow down thereby making the animation task slow and arduous. Also, extra work on part of the animators is needed to build low-fidelity versions of models and swap them in and out of scenes. This technique also does not help during the rendering process since final rendering generally requires the highest-fidelity (or full-fidelity) versions of the models to be used.
Another conventional technique that is commonly used to process large scenes is scene segmentation. In this technique, a user (e.g., an animator) arbitrarily breaks up a scene into multiple sets of models, each of which becomes a scene of its own that is animated and rendered separately. The resultant sub-scene images are then composited together. This decomposition is however artificial and an impediment to the creative process. Further, it may be very difficult or even impossible to break up a scene in which many models are interacting with one another.
In light of the above, techniques are desired that enable users such as animators and other artists to process and manipulate large and complex scenes in an easy manner.